跳到主要内容

容错

镜像

这些主题描述数据库服务器镜像功能。有关如何执行镜像任务的指示信息,请参阅使用镜像。

镜像

镜像是一种策略,用于将一个已定义的数据库空间、BLOB 空间或 BLOB 空间的主块与同等大小的镜像块联结成对。

每次写入主块将自动伴随向镜像块的相同写入。下图说明了此概念。如果在主块上发生故障,镜像可使您从镜像块读取或向镜像块写入,直至您可恢复主块,而不会中断用户对数据的访问。

图: 将数据同时写入主块和镜像块

admin055

在通过网络管理的磁盘上不支持镜像。 同一数据库服务器实例必须管理镜像集的所有块。

镜像的好处

如果发生介质故障,那么镜像将为数据库服务器管理员提供恢复数据但不必使数据库服务器脱机的方法。该功能可带来更大的可靠性和更少的系统停机时间。而且,如果对该数据制作镜像的块位于不同介质上,那么应用程序可以继续从数据库读取或写入数据库(该数据库的主块位于受影响的介质上)。

所有关键数据库都必须位于镜像数据库空间中。 必须对包含数据库服务器保留页的根数据库空间制作镜像。

镜像的成本

磁盘空间成本和性能成本与镜像过程相关联。磁盘空间成本是由于存储镜像数据需要附加空间。性能成本源于对主块和镜像块都执行写入。 为磁盘写入使用多个虚拟处理器将降低该性能成本。根据块中的数据位置使用分开读取(数据库服务器通过分开读取从主块或镜像块读取数据)实际上对于只读数据可使性能提高。有关数据库服务器如何执行对镜像块的读写的更多信息,请参阅处理期间执行的操作。

不制作镜像的后果

如果您未对数据库空间制作镜像,那么在介质故障后必须从存储空间备份进行复原的频率会增加。

当镜像块受到介质故障影响时,数据库服务器仅从仍在线的块中读取,直至您将脱机块恢复为在线。当镜像对的第二个块脱机时,数据库服务器将无法访问存储在该块上的数据。如果块包含逻辑日志文件、物理日志或根数据库空间,那么数据库服务器将立即脱机。 如果块不包含逻辑日志文件、物理日志或根数据库空间,那么数据库服务器可以继续操作,但线程无法从脱机块中读取或写入脱机块。如果未镜像的块停止运行,那么您必须通过从备份恢复数据库空间来复原该块。

要制作镜像的数据

理想情况下必须对所有数据制作镜像。但如果磁盘空间成为问题,您可能无法对所有数据制作镜像。在这种情况下,请选择某些关键块来制作镜像。

关键块始终包括作为根数据库空间一部分的块、存储逻辑日志文件的块和存储物理日志的块。如果这些关键块中有任何一个发生故障,那么数据库服务器立即脱机。

如果某些块容纳那些对您的业务很关键的数据,那么对这些块授予高优先级以用于镜像。

此外,针对为那些存储常用数据的块制作镜像授予优先级。该操作确保当一个广泛使用的块脱机时许多用户的活动不会停止。

镜像备用方法

如本手册中的说明,镜像是一种数据库服务器功能。您的操作系统或硬件可能会提供备用的镜像解决方案。

如果您在考虑使用操作系统提供的镜像功能而不是数据库服务器镜像,那么在您决定使用哪种功能之前将两个功能的实现进行比较。镜像过程中最慢的步骤是将数据实际写入磁盘。 数据库服务器以并行方式执行对镜像块的写入的策略可帮助减少该步骤所需的时间。(请参阅磁盘写入镜像块。)另外,数据库服务器镜像使用分开读取以提高读性能。(请参阅磁盘从镜像块读取。)未使用并行镜像写入和分开读取的操作系统镜像功能可能提供的性能较差。

您也可以同时运行数据库服务器镜像和操作系统镜像。它们可独立于彼此运行。在某些情况下,您可能决定同时使用数据库服务器镜像和您的操作系统提供的镜像功能。例如,您可能在同一磁盘驱动器上既有数据库服务器数据又有其他数据。可以使用操作系统镜像对其他数据进行数据,使用数据库服务器镜像对数据库服务器数据制作镜像。

逻辑卷管理器

逻辑卷管理器是备用镜像解决方案。有些操作系统供应商提供此类型的实用程序,以便将多个磁盘视为一个文件系统。保存数据至两个以上的磁盘将给您更多保护以防止介质故障,但附加的写入会增加性能成本。

硬件镜像

另一个解决方案是使用硬件镜像,例如低价磁盘的冗余阵列 (RAID)。此类型硬件镜像的优势在于与数据库服务器所需相比,它需要更少的磁盘空间来存储相同的数据量以防止介质故障。

有些硬件镜像系统支持热交换。您可以在保持数据库服务器在线时交换坏磁盘。 建议在执行热交换之前减少 I/O 活动。

重要

如果在使用硬件镜像时数据库服务器发生问题,请参阅操作系统或磁盘文档或技术支持以获取协助。

外部备份与复原

如果使用硬件磁盘镜像,与使用常规的 ON-Bar 命令相比,使用外部备份与复原可以使系统更快地在线。有关外部备份与复原的更多信息,请参阅《GBase 8s 备份与复原指南》。

镜像过程

本节更详细地描述了镜像过程。有关如何执行诸如创建镜像块、启动镜像过程、更改镜像块状态等镜像操作的指示信息,请参阅使用镜像。

创建镜像块

当您指定镜像块,数据库服务器就将所有数据从主块复制到镜像块。 该复制过程被称为恢复。一旦恢复完成,镜像过程就立即开始。

如果您对包含逻辑日志文件的数据库空间中的块开始制作镜像,那么将延迟恢复过程(该过程标记镜像开始)。 在您创建根数据库空间的 0 级备份之后,才会开始对包含逻辑日志文件的数据库空间制作镜像。延迟可确保如果包含这些逻辑日志文件的主块在数据库空间复原期间变为不可用,数据库服务器可使用镜像的逻辑日志文件。

0 级备份将更新的数据库服务器配置信息(包括有关新镜像块的信息)从根数据库空间保留页复制到备份。如果您执行数据复原,那么如果主块不可用,在备份开始时已更新的配置信息会让数据库服务器查找逻辑日志文件的镜像副本。如果该新的存储空间备份信息不存在,那么数据库服务器无法利用已制作镜像的日志文件。

由于类似原因,您无法在创建数据库空间备份时对包含逻辑日志文件的数据库空间制作镜像。备份开始以后,不能复制数据库空间备份磁带的第一个块中必须包含的新信息。

有关创建镜像块的更多信息,请参阅使用镜像。

镜像状态标志

数据库空间、BLOB 空间和智能大对象空间具有指示它们已镜像还是未镜像的状态标志。

您必须在镜像开始前对根数据库空间执行 0 级备份。

块具有指示以下信息的状态标志:

  • 块是主块还是镜像块
  • 当前块是在线、脱机、新镜像的块(需要对根数据库空间进行 0 级备份)还是处于正在恢复的过程。

有关这些块状态标志的描述,请参阅《GBase 8s 管理员参考》 中有关 onstat -d 选项的描述。有关如何显示这些状态标志的信息,请参阅监视磁盘使用量。

恢复

当数据库服务器恢复镜像块时,它执行与镜像开始时所使用过程相同的恢复过程。镜像恢复过程包括将数据从现有在线块复制到新的已修复的块,直至这两者完全相同。

当您启动恢复时,数据库服务器将脱机块置于恢复方式并将信息从在线块复制到恢复块。当恢复完成,该块会自动获取在线状态。无论您正在恢复镜像对的主块还是在恢复镜像块,均执行相同的步骤。

提示

在恢复过程中您仍可使用在线块。如果将数据写入已经复制到恢复块的页,数据库服务器会在继续进行恢复过程之前在恢复块上更新相应页。

有关如何恢复脱机块的信息,请参阅恢复镜像块页面上有关恢复镜像块的信息。

处理期间执行的操作

这些主题说明了镜像块磁盘 I/O 的一些详细信息以及数据库服务器如何为这些块处理介质故障。

磁盘写入镜像块

在数据库服务器处理期间,数据库服务器通过为每次修改执行两个并行写入(一个写入主块,一个写入镜像块)来执行镜像。

磁盘从镜像块读取

因为数据的两个版本位于不同磁盘上,所以数据库服务器使用镜像来提高读性能。根据块的哪一半包含数据页的地址,将决定是从主块还是从镜像块读取数据页。此功能称为分开读取。分开读取通过减少磁盘搜索时间来提高性能。因为磁盘头必须经过的最大距离减少了一半,所以减少了磁盘搜索时间。下图说明了分开读取。

图: 分开读取可减少磁盘头必须经过的最大距离。

admin056

检测介质故障

数据库服务器首先在打开块时检查返回码,然后在任何读取或写入后均检查返回码。无论何时数据库服务器检测到主(或镜像)块设备发生故障,它会将块状态标志设置为脱机 (D)。 有关块状态标志的信息,请参阅镜像状态标志。

如果数据库服务器检测到主(或镜像)块设备发生故障,对保持在线的那个块仍继续读取和写入。即使管理员有意使其中一个块脱机,情况也是如此。

管理员恢复脱机块并将其返回至在线状态以后,会再次在主块和镜像块之间分开读取,并对两个块均进行写入。

块恢复

数据库服务器使用异步 I/O 以使恢复块所需的时间最小化。从在线块进行读取可与对脱机块的写入重叠进行,而非这两个过程逐次地发生。即,执行读取的线程无需等待执行写入的线程完成,就可读取更多数据。

停止镜像过程的结果

结束镜像过程时,数据库服务器会立即释放镜像块,使空间可用于重新分配。 结束镜像过程的操作仅需几秒钟。

在结束镜像过程后对根数据库空间创建 0 级备份,以确保将包含更新镜像块信息的保留页复制到备份。该操作使复原过程不会再假设镜像数据仍可用。

镜像块的结构

如下所示,镜像块与主块包含相同的控制结构:

  • BLOB 空间块的镜像包含 BLOB 空间开销页。
  • 数据库空间块的镜像包含数据库空间开销页。
  • 智能大对象空间的镜像包含元数据页。

有关这些结构的信息,请参阅 《GBase 8s 管理员参考》中磁盘结构和存储器章节中有关镜像块结构的部分。

假如采用监视块中说明的方法之一,磁盘空间使用的显示将始终指示镜像块已满(即使主块有可用空间)。充满的镜像块表明除充当主块的镜像以外,块中没有空间可用于其他用途。只要主块和镜像块在线,该状态就保持充满。

如果主块脱机并且镜像块成为主块,那么磁盘空间分配报告会准确描述新主块的填充度。

使用镜像

这些主题描述使用数据库服务器镜像功能所需的各种镜像任务。它概述了对数据制作镜像所需的步骤。

准备对数据制作镜像

本节描述如何在正在运行但未启用镜像功能的数据库服务器上为数据启动镜像过程。

要准备对数据制作镜像,请执行以下操作:

  1. 使数据库服务器脱机并启用镜像。

    请参阅启用 MIRROR 配置参数

  2. 使数据库服务器恢复在线。

  3. 为镜像块分配磁盘空间。

    您随时可以分配该磁盘空间,只要在下一步指定镜像块时磁盘空间可用。镜像块必须与相应主块位于不同的磁盘上。请参阅为镜像数据分配磁盘空间

  4. 选择要制作镜像的数据库空间、BLOB 空间或智能大对象空间,并为该存储空间中的每个主块指定镜像块路径名和偏移量。

    在执行这一步后镜像过程开始。为所有希望镜像的存储空间重复该步骤。请参阅使用镜像

启用 MIRROR 配置参数

可以设置 MIRROR 配置参数来启用(或禁用)镜像。

启用镜像将启动镜像任务所需的数据库服务器功能。但是,当您启用镜像时,您并未启动镜像过程。直至您为数据库空间、BLOB 空间或智能大对象空间创建镜像块,镜像才会实际开始。请参阅使用镜像。

如果您计划为根数据库空间创建镜像,将其作为初始化的一部分,那么在初始化数据库服务器时启用镜像;否则,保持镜像禁用。如果您稍后决定对存储空间制作镜像,您可以更改 MIRROR 配置参数的值。

要为数据库服务器启用镜像,必须在 onconfig 中将 MIRROR 参数设置为 1。 MIRROR 的缺省值为 0,指示镜像已禁用。

如果您未使用镜像,那么不要将 MIRROR 参数设置为 1 。

要更改 MIRROR 的值,您可以在数据库服务器处于在线模式时使用文本编辑器编辑 onconfig 文件。更改 onconfig 文件后,将数据库服务器转为脱机并随后转为静态,以使更改生效。

为镜像数据分配磁盘空间

在您可以创建镜像块之前,必须为该用途分配磁盘空间。您可以为镜像块分配原始磁盘空间或熟文件空间。有关分配磁盘空间的说明,请参阅分配磁盘空间。

始终用不同的控制器(理想情况下)在不同于相应主块的磁盘上为镜像块分配磁盘空间。可以使用此设置在主块所在磁盘脱机时访问镜像块,反之亦然。

链接块 (UNIX)

使用 UNIX™ 链接 (ln) 命令将镜像块的实际文件或原始设备链接至镜像路径名。如果发生磁盘故障,您可以将新的文件或原始设备链接至该路径名,而不必实际更换故障磁盘后再将块恢复在线。

在磁盘故障后将块重新链接至设备

在 UNIX™ 上,如果实际镜像文件或原始设备所在的磁盘脱机,您可以将块重新链接至不同磁盘上的文件或原始设备。如果执行此操作,那么可在将故障磁盘恢复在线之前恢复镜像块。您可用于重新链接的常用 UNIX 命令显示在以下示例中。

原始设置由主 Root 块和镜像 Root 块组成,它们被链接至实际的原始磁盘设备,如下所示:

表 2. 将辅助数据库服务器更改为标准服务器后的自动重新启动步骤假设原始设备 /dev/rsd2b 所在磁盘已脱机。您可以使用 rm 命令除去相应的符号链接,如下所示:

rm /dev/mirror_root

此时可以将镜像块路径名重新链接至正在运行的磁盘上的原始磁盘设备,并继续恢复块,如下所示:

ln -s /dev/rab0a /dev/mirror_root

使用镜像

当您为数据库空间、BLOB 空间或智能大对象空间中的每个主块创建镜像块后,镜像开始。

当您创建镜像块,数据库服务器就将数据从主块复制到镜像块。 当该过程完成,数据库服务器开始镜像数据。 如果主块包含逻辑日志文件,数据库服务器不会在您创建镜像块后立即复制数据,而是一直等待,直至您执行 0 级备份。有关此行为的说明,请参阅创建镜像块。

注意

您必须始终启动对整个数据库空间、BLOB 空间或智能大对象空间的镜像过程。数据库服务器不允许您在数据库空间、BLOB 空间或智能大对象空间中选择特定块来镜像。您必须为空间中的每个块创建镜像块。

在执行以下操作后,启动对存储空间的镜像过程:

  • 在系统初始化期间创建镜像根数据库空间
  • 将数据库空间的状态从未镜像更改为已镜像
  • 创建镜像的数据库空间、BLOB 空间或智能大对象空间

这些操作中的每一个操作均需要您为存储空间中的现有块创建镜像块。

初始化期间为根数据库空间制作镜像

如果您在初始化数据库服务器时启用镜像,您还可为 Root 块指定镜像路径名和偏移量。数据库服务器在初始化服务器时创建镜像块。但因为 Root 块包含逻辑日志文件,所以直至您执行 0 级备份镜像才会实际开始。

要指定 Root 镜像路径名和偏移量,请在启动数据库服务器之前在 onconfig 文件中设置 MIRRORPATH 和 MIRROROFFSET 的值。

如果未提供镜像路径名和偏移量,但希望为根数据库空间启动镜像过程,那么必须在初始化数据库服务器后更改根数据库空间的镜像状态。

更改镜像状态

您可以进行以下两种对镜像块状态的更改:

  • 将镜像块从在线更改为脱机
  • 将镜像块从脱机更改为恢复

仅当块是镜像对的一部分时才可以使块脱机或复原块。只要该对中的另一块处于在线状态,您就可以使主块或镜像块脱机。

有关如何确定块状态的信息,请参阅监视磁盘使用量。

管理镜像

您可以使用 onspaces 实用程序管理镜像。

有关 onspaces 语法的完整描述,请参阅《GBase 8s 管理员参考》 中的 onspaces 实用程序的内容。

启动未镜像存储空间的镜像过程

您可以随时准备对数据库空间、BLOB 空间或智能大对象空间制作镜像。但直至您执行 0 级备份该镜像才会开始。

使用 onspaces 启动未镜像数据库空间的镜像过程

您可以使用 onspaces 实用程序为数据库空间、BLOB 空间或智能大对象空间启动镜像过程。例如,以下 onspaces 命令为数据库空间 db_project(它包含data1 和 data2 两个块)启动镜像过程:

onspaces -m db_project\
-p /dev/data1 -o 0 -m /dev/mirror_data1 0\
-p /dev/data2 -o 5000 -m /dev/mirror_data2 5000

以下示例显示如何启动对名为 sp1 的数据库空间的镜像过程。您可以在命令中或在文件中指定主路径、主偏移量、镜像路径和镜像偏移量。

onspaces -m sp1 -f mirfile

mirfile 文件包含以下行:

/ix/9.3/sp1 0 /ix/9.2/sp1mir 0

在这一行中,/ix/9.3/sp1 是主路径,0 是主偏移量,/ix/9.3/sp1mir 是镜像路径,0 是镜像偏移量。

启动新存储空间的镜像过程

您还可在创建新的数据库空间、BLOB 空间或智能大对象空间时启动镜像过程。

使用 onspaces 启动新空间的镜像过程

您可以使用 onspaces 实用程序创建镜像数据库空间。例如,以下命令创建带有初始块 /dev/chunk1 和镜像块 /dev/mirror_chk1 的数据库空间 db_acct:

onspaces -c -d db_acct -p /dev/chunk1 -o 0 -s 2500 -m /dev/mirror_chk1 0

另一个启动镜像过程的方法是选择通过实用程序建立索引 > onspaces -m。

添加镜像块

如果您向已镜像的数据库空间、BLOB 空间或智能大对象空间添加块,您必须也添加相应的镜像块。

使用 onspaces 添加镜像块

您可以使用 onspaces 实用程序向数据库空间、BLOB 空间或智能大对象空间添加主块及其镜像块。以下示例将块 chunk2 添加至 db_acct 数据库空间。因为数据库空间已镜像,所以也添加镜像块 mirror_chk2。

onspaces -a db_acct -p /dev/chunk2 -o 5000 -s 2500 -m /dev/mirror_chk2 5000

使镜像块脱机

当镜像块脱机时,数据库服务器无法向其中写入或从其中读取。您可以使镜像块脱机,从而将块重新链接至不同设备。 (请参阅在磁盘故障后将块重新链接至设备。)

使块脱机与结束镜像过程不同。您为整个数据库空间结束镜像过程,这使数据库服务器为该数据库空间删除所有镜像块。

使用 onspaces 使镜像块脱机

您可以使用 onspaces 实用程序使块脱机。以下示例使一个块(它是数据库空间db_acct 的一部分)脱机:

onspaces -s db_acct -p /dev/mirror_chk1 -o 0 -D

恢复镜像块

要开始对在线块中的数据制作镜像,您必须恢复脱机块。

使用 onspaces 恢复镜像块

可以使用 onspaces -s 实用程序恢复脱机块。例如,要恢复路径名为 /dev/mirror_chk1 且偏移量为 0 KB 的块,请发出以下命令:

onspaces -s db_acct -p /dev/mirror_chk1 -o 0 -O

结束镜像过程

当您对数据库空间、BLOB 空间或智能大对象空间结束镜像过程时,数据库服务器立即释放该空间的镜像块。这些块立即可用于重新分配至其他存储空间。

只有用户 gbasedbt 和 root(在 UNIX™ 上)才能结束镜像过程。

如果数据库空间中的任一主块脱机,那么您无法结束镜像过程。结束镜像过程时,系统可以处于在线模式。

使用 onspaces 结束镜像过程

您可以用 onspaces 实用程序结束镜像过程。 例如,要结束根数据库空间的镜像过程,可输入以下命令:

onspaces -r rootdbs

另一个结束镜像过程的方法是选择通过实用程序建立索引 > onspaces -r

一致性检查

GBase 8s 数据库服务器用于检测硬件或操作系统错误所导致的数据库服务器故障或问题。它通过在其许多关键功能中执行断言来检测问题。断言是一种一致性检查,验证页、结构或其他实体与将另外假定的页、结构或其他实体相匹配。

当这些检查中有一个检查发现内容不正确时,数据库服务器将报告断言失败并在数据库服务器消息日志中写入文本以描述失败的检查。数据库服务器还在另外的文件中收集进一步的诊断信息,该文件可能对 GBase 8s 技术支持人员有用。

这些主题提供了一致性检查措施以及处理不一致的方法的概述。

执行定期的一致性检查

要从一致性检查获取最大好处并确保数据库空间备份的完整性,必须定期执行以下操作:

  • 验证所有数据和数据库服务器开销信息是一致的。
  • 检查消息日志是否在您验证一致性时有断言失败。
  • 在您验证一致性后创建 0 级数据库空间备份。

以下主题描述了其中每个操作。

验证一致性

由于此检查需要一定时间并且此检查可能导致争用,因此请将此检查调度为在活动最少的时候执行。必须在创建 0 级备份之前执行此检查。

运行下表中显示的命令以作为一致性检查的一部分。

表 1. 检查数据一致性

验证类型命令
系统目录表oncheck -cc
数据oncheck -cD dbname
扩展数据块数oncheck -ce
索引oncheck -cI dbname
保留页oncheck -cr
逻辑日志和保留页oncheck -cR
元数据和智能大对象oncheck -cs

您可以在数据库服务器处于在线模式时运行这些命令中的每个命令。有关每个命令如何在检查对象时锁定它们以及哪些用户可以执行验证的信息,请参阅 《GBase 8s 管理员参考》 中的 oncheck。

在大多数情况下,如果这些验证过程中的一个或多个过程检测到错误,那么解决方案是从数据库空间备份复原数据库。但是,错误的来源也可能是硬件或操作系统。

验证系统目录表

要验证系统目录表,使用 oncheck -cc 命令。

每个数据库包含它本身的系统目录,该目录包含有关数据库表、列、索引、视图、约束、存储过程和特权的信息。

如果当验证完成时显示警告,那么该警告的唯一用途是提醒您找不到特定类型的记录。这些警告并非指示您的数据、系统目录或甚至数据库设计有任何问题。该警告仅指示不存在任何表的同义词;即,系统目录在表 syssyntable 中不包含记录。 例如,如果您为没有为任何表定义同义词的数据库验证系统目录表,那么可能显示以下警告:

WARNING: No syssyntable records found.

但是,如果您在验证系统目录表时接收到错误消息,那么情况就完全不同了。请立即与 GBase 8s 技术支持联系。

验证数据页

要确认数据页,请使用 oncheck -cD 命令。

如果数据页验证检测到错误,请尝试从指定表中卸载数据,删除该表,重新创建该表,并重新装入该数据。

验证扩展数据块

要确认每个数据库中的扩展数据块,请使用 oncheck -ce 命令。

扩展数据块一定不能重叠。如果该命令检测到错误,请从存储空间备份执行数据复原。

验证索引

如果索引已损坏,那么数据库服务器在查询中将无法使用索引。

可以通过使用 oncheck -cI 命令来验证数据库中每个表上的索引。

此外,调度程序任务 bad_index_alert将查找已被服务器标记为已损坏的索引。此任务在每晚运行。对于此任务找到的每个已损坏索引,都会在sysadmin:ph_alert表中建立一个条目。

如果索引已损坏,请将其删除,然后重新创建。

验证逻辑日志

要确认逻辑日志和保留页,请使用 oncheck -cR 命令。

验证保留页

要确认保留页,请使用 oncheck -cr 命令。

保留页是位于根数据库空间初始块开始处的页。这些页包含主数据库服务器开销信息。如果该命令检测到错误,请从存储空间备份执行数据复原。

该命令可能会提供警告。在大多数情况下,这些警告让您注意的是您已经知道的情况。

验证元数据

对每个数据库运行 oncheck -cs 以验证数据库中所有智能大对象的元数据。如有必要,从数据库空间备份复原数据。

监视数据不一致性

如果一致性检查代码在数据库服务器操作期间检测到不一致,将向数据库服务器消息日志报告断言失败。(请参阅《GBase 8s 管理员参考》中的消息日志主题。)

消息日志和转储文件中的读断言失败以下示例显示断言失败在消息日志中采用的格式。

Assert Failed: Short description of what failed
Who: Description of user/session/thread running at the time
Result: State of the affected database server entity
Action: What action the database server administrator should take
See Also: file(s) containing additional diagnostics

See Also: 行中包含以下一个或多个文件名:

  • af.xxx
  • shmem.xxx
  • gcore.xxx
  • gcore.xxx
  • /path name/core

在所有情况中,xxx 对与单个线程的断言失败相关联的所有文件而言是一个公共的十六进制数。文件 af.xxx、shmem.xxx 和 gcore.xxx 位于 ONCONFIG 参数 DUMPDIR 指定的目录下。

文件 af.xxx 包含发送到消息日志的断言失败消息的副本以及当前相关结构和数据缓冲区的内容。

仅当 ONCONFIG 参数 DUMPSHMEM 设置为 1 或 2 时,文件 shmem.xxx 才包含断言失败时数据库服务器共享内存的完整副本。

仅限 UNIX: 在 UNIX™ 上,仅当 ONCONFIG 参数 DUMPGCORE 设置为 1 且您的操作系统支持 gcore 实用程序时,gcore.xxx 才包含数据库服务器虚拟进程(线程此时在其上运行)的核心转储。仅当 ONCONFIG 参数 DUMPCORE 设置为 1 时,core 才包含数据库服务器虚拟进程(线程此时在其上运行)的核心转储。core 文件的路径名是上次调用数据库服务器的目录。

验证表和表空间数据

要验证表和表空间数据,请对数据库或表使用 oncheck -cD 命令。

大多数的一般断言失败消息后面均跟随其他信息,其他信息通常包含检测到错误的表空间。如果此检查确认存在不一致情况,请从表中卸载数据,删除该表,重新创建该表,并重新装入该数据。否则,无需执行其他任何操作。

在许多情况中,数据库服务器当断言失败时会立即停止。但是,当失败看起来是特定于某个表或较小实体时,数据库服务器会继续运行。

当断言是由于数据库服务器代表用户访问的数据页上的不一致而失败时,还会将错误发送至应用程序进程。SQL 错误取决于正在进行的操作。但是,ISAM错误几乎始终是 -105 或 -172,如下所示:

-105 ISAM error: bad isam file format
-172 ISAM error: Unexpected internal error

有关消息的目标和内容的更多详细信息,请参阅《GBase 8s 管理员参考》中有关消息日志消息的主题。

保留一致的 0 级备份

在您执行验证一致性中描述的检查而不出错之后,请创建 0 级备份。保留该存储空间备份和所有后续的逻辑日志备份磁带,直至您完成下一次一致性检查。请在每次 0 级备份之前执行一致性检查。如果不这样做,那么至少保留所有从存储空间备份恢复所需的磁带,该备份是在验证数据库服务器一致之后立即创建的。

处理损坏

本节描述数据库服务器系统损坏的一些症状以及数据库服务器或您(作为管理员)为解决问题可采取的操作。数据库中的损坏可能作为硬件或操作系统问题的后果而出现,或可能由于某些未知的数据库服务器问题而导致。损坏可能影响数据或数据库服务器开销信息。

查找损坏症状

可以通过多种不同的方法查找有关损坏的信息。

数据库服务器通过以下方式提醒用户和管理员可能有损坏:

  • 报告给应用程序的错误消息,说明找不到页、表或数据库。如果由于基础数据或开销信息中的不一致而导致操作失败,那么以下错误之一将始终返回至应用程序:

    -105 ISAM error: bad isam file format
    -172 ISAM error: Unexpected internal error
  • 断言失败报告将写入数据库服务器消息日志。它们始终指示包含可帮助您确定问题来源的附加诊断信息的文件。 请参阅验证一致性。

  • oncheck 实用程序返回错误。

  • ph_alert 表显示了有关已损坏索引的信息。

修复索引损坏

在第一次指示损坏时,运行 oncheck -cI 命令以确定损坏是否存在于索引中。

如果您在数据库服务器处于在线模式时检查索引,oncheck 检测损坏但不会提示您进行修复。如果存在损坏,您可以在处于在线模式(数据库服务器锁定表和索引)时使用 SQL 语句删除并重新创建索引。如果您在静态模式中运行 oncheck -cI 并检测到损坏,将提示您确认实用程序是否尝试修复该损坏。

修复块上的 I/O 错误

如果在数据库服务器操作期间发生 I/O 错误,那么发生了错误的块的状态将更改为脱机。

如果块脱机,那么 onstat -d 将显示主块的块状态为 PD-,镜像块的块状态为 MD-。有关 onstat -d 输出的示例,请参阅《GBase 8s 管理员参考》。

另外,消息日志列出了带有出错位置和建议的解决方案的消息。所列解决方案是可能的解决办法,但不一定能纠正该问题。

如果脱机块已镜像,那么数据库服务器继续使用镜像块操作。使用操作系统实用程序来确定脱机块的问题并纠正该问题。 然后您必须定向数据库服务器以复原镜像块数据。

有关恢复镜像块的信息,请参阅恢复镜像块。

如果脱机的块未镜像并且包含逻辑日志文件、物理日志文件或根数据库空间,那么数据库服务器将立即启动停止操作。否则,数据库服务器可以继续操作,但无法写入或读取脱机块或该块所在数据库空间中的任何其他块。必须采取步骤以确定 I/O 错误发生的原因、纠正问题并从备份复原数据库空间。

如果当某块标记为脱机 (D) 时将数据库服务器变为脱机方式,那么您可以重新启动数据库服务器,前提是标记为脱机的块不包含关键数据(逻辑日志文件、物理日志文件或根数据库空间)。

收集诊断信息

若干 ONCONFIG 参数会影响数据库服务器收集诊断信息的方式。 因为断言失败通常指示不可预见的问题,所以无论何时发生问题都要通知 GBase 8s技术支持。  收集的诊断信息旨在为 GBase 8s 技术人员所使用。af.xxx 文件的内容和使用以及共享核心不再做进一步的说明。

要确定触发断言失败的问题的原因,那么您不能删除诊断信息(直至 GBase 8s 技术支持指示您可以这样做),这一点至关重要。af.xxx 文件通常包含解决问题所需的信息。

若干 ONCONFIG 参数会指示数据库服务器不管在何时检测到断言失败或数据库服务器进入结束序列,都保留诊断信息:

  • DUMPDIR
  • DUMPSHMEM
  • DUMPCNT
  • DUMPCORE
  • DUMPGCORE

有关配置参数的更多信息,请参阅《GBase 8s 管理员参考》。

您可决定是否设置这些参数。诊断输出可能会使用大量磁盘空间。(准确内容取决于环境变量设置和您的操作系统。)输出元素可能包含共享内存的副本和核心转储。

提示

核心转储在断言失败时内存中的进程映像。 在有些系统上,核心转储包括共享内存的副本。核心转储仅在这种情况中才是有用的。

如果有磁盘空间约束,数据库服务器管理员可能更愿意编写脚本来检测诊断输出是否存在指定目录中并将该输出发送至磁带。该方法保留诊断信息并使已使用的磁盘空间量最小化。

禁用 I/O 错误

GBase 8s 将禁用 I/O 错误分为两大类:破坏性的和非破坏性的。当包含数据库的磁盘在某些方面受到损坏时,禁用 I/O 错误是破坏性的。该类型的事件会威胁数据的完整性,并且数据库服务器会将块和数据库空间标记为脱机。数据库服务器禁止对损坏磁盘进行访问,直至您修复或替换该磁盘并执行物理复原和逻辑复原。

当错误不威胁数据的完整性时,禁用 I/O 错误是非破坏性的。当有人意外地断开电缆连接时,会发生非破坏性的错误,您有可能擦除了设置为指向块的符号链接,或可能磁盘控制器被损坏。

在数据库服务器将某 I/O 错误视为禁用错误之前,该错误必须符合两个标准。首先,错误必须是在数据库服务器尝试对至少具有以下某个特征的块执行操作时发生:

  • 块没有镜像。
  • 与所涉及的块成对的主块或镜像块脱机。

其次,错误必须是在数据库服务器尝试执行以下操作之一不成功时发生:

  • 在块上搜索、读取或写入

  • 打开块

  • 验证有关首次使用的页的块信息是否有效

    数据库服务器在其打开块之后将该验证作为稳定情况检查而执行。

可以防止数据库服务器在您调查禁用 I/O 错误时将数据库空间标记为脱机。如果您发现问题是小问题(如电缆松动),您可以将数据库服务器变为脱机,然后再次变为在线,不用从备份复原受影响的数据库空间。如果您发现问题更为严重(如磁盘损坏),您可以使用 onmode -O 将受影响的数据库空间标记为脱机并继续处理。

监视数据库服务器是否有禁用 I/O 操作

数据库服务器用两种方法向您通知禁用 I/O 错误:

  • 消息日志
  • 事件警报

用于监视禁用 I/O 错误的消息日志

发生禁用 I/O 错误时,数据库服务器会向消息日志发送一条消息。

消息为:

Assert Failed: Chunk {chunk-number} is being taken OFFLINE.
Who: Description of user/session/thread running at the time
Result: State of the affected database server entity
Action: What action the database server administrator should take
See Also: DUMPDIR/af.uniqid containing more diagnostics

如下表所述,结果和操作取决于 ONDBSPACEDOWN 的当前设置。

ONDBSPACEDOWN 设置结果操作
0禁用数据库空间 {space_name}。复原数据库空间 {space_name}。
禁用 BLOB 空间 {space_name}。复原 BLOB 空间 {space_name}。
1数据库服务器必须停止。关闭并重新启动数据库服务器。
2数据库服务器在下一检查点时阻塞。使用 onmode -k 关机,或使用 onmode -O 覆盖。

ONDBSPACEDOWN 的值对临时数据库空间没有影响。对于临时数据库空间,不管怎样设置 ONDBSPACEDOWN,数据库服务器将继续处理。如果临时数据库空间需要修订,可将其删除并重新创建。

有关解释数据库服务器发送至消息日志的消息的更多信息,请参阅《GBase 8s 管理员参考》中有关消息日志消息的主题。

用于监视禁用 I/O 错误的事件警报

当数据库空间引发禁用 I/O 错误时,数据库服务器会将指定值作为参数传递给事件警报可执行文件。

事件警报值:

严重性

4(紧急)

5

类消息

Dbspace is disabled: 'dbspace-name'

特定消息

Chunk {chunk-number} is being taken OFFLINE.

事件标识

5001

如果您想要数据库服务器使用事件警报向您通知禁用 I/O 错误,可编写脚本,数据库服务器在检测到禁用 I/O 错误时将执行该脚本。有关如何设置您编写的此可执行文件的信息,请参阅 《GBase 8s 管理员参考》中有关事件警报的附录和有关配置参数的主题。

无坏扇区映射

GBase 8s 依赖您的主计算机的操作系统来进行坏扇区映射。 数据库服务器在从系统调用接收到失败返回码时知道了坏扇区或坏磁道。当发生这种情况时,数据库服务器将数次重新尝试访问,以确保该情况不是虚假情况。 如果确认了该情况,数据库服务器将尝试了读或写的块标记为脱机。

数据库服务器无法采取任何操作来识别坏的柱面、磁道或扇区位置,因为仅有的可用信息是尝试 I/O 操作的块中的字节位移。

如果数据库服务器在未制作镜像的块上检测到 I/O 错误,将会将该块标记为脱机。如果脱机块包含逻辑日志文件、物理日志或根数据库空间,那么数据库服务器将立即启动停止操作。否则,数据库服务器可以继续操作,但在复原其数据库空间之前应用程序无法访问脱机块。